JBoss.orgCommunity Documentation

Chapter 5. ISUP

5.1. ISUP Configuration
5.2. ISUP Usage
5.3. ISUP Example

ISUP( ISDN User Part or ISUP ) is part of SS7 which is used to establish telephone calls and manage call switches( exchanges). Exchanges are connected via E1 or T1 trunks. Each trunk is divided by means of TDM into time slots. Each time slot is distinguished as circuit. Circuits (identified by code) are used as medium to transmit voice data between user equipment (or exchanges if more than one is involved).

ISUP allows not only to setup a call, but to exchange information about exchange state and its resources(circuits).

Note

JBoss Communications ISUP is based on ITU-T Q.76X series of documents.

JBoss Communications ISUP stack is configured with simple properties. Currently following properties are supported:

Table 5.1. ISUP Configuration options

NameDefault valueValue rangeDescription
niNone, must be provided0-3Sets value of network indicator that should be used by stack.
localspcNone, must be provided0 - (2^14)-1Sets local signaling point code. It will be used as OPC for outgoing signaling units.
t14s4s - 15sSets T1 value. Started when REL is sent. See A.1/Q.764
t55 min.5min - 15 minSets T5 value. Started when initial REL is sent. See A.1/Q.764
t720s20s -30sSets T7 value. (Re)Started when Address Message is sent. See A.1/Q.764
t1215s15s - 60s Sets T12 value. Started when BLO is sent. See A.1/Q.764
t135min5min - 15minSets T13 value. Started when initial BLO is sent. See A.1/Q.764
t145s15s - 60sSets T14 value. Started when UBL is sent. See A.1/Q.764
t155min5min - 15minSets T15 value. Started when initial UBL is sent. See A.1/Q.764
t165s15s - 60sSets T16 value. Started when RSC is sent. See A.1/Q.764
t175min5min - 15minSets T17 value. Started when initial RSC is sent. See A.1/Q.764
t185s15s - 60sSets T18 value. Started when CGB is sent. See A.1/Q.764
t195min5min - 15minSets T19 value. Started when initial CGB is sent. See A.1/Q.764
t205s15s - 60sSets T20 value. Started when CGU is sent. See A.1/Q.764
t215min5min - 15minSets T21 value. Started when initial CGU is sent. See A.1/Q.764
t225s15s - 60sSets T22 value. Started when GRS is sent. See A.1/Q.764
t235min5min - 15minSets T23 value. Started when initial GRS is sent. See A.1/Q.764
t2810s10sSets T28 value. Started when CQM is sent. See A.1/Q.764
t3312s12s - 15sSets T33 value. Started when INR is sent. See A.1/Q.764

Note that before start user must provide two interfaces to stack:

Mtp3UserPart

implementation of transport layer which should be used by stack

CircuitManager

circuit manager implementation. This interface stores information on mapping between CIC(Circuit Identification Code) and DPC(Destination Point Code) used as destination for outgoing messages.

The org.mobicents.protocols.ss7.isup.ISUPStack interface defines the methods required to represent ISUP Protocol Stack. ISUPStack exposes org.mobicents.protocols.ss7.isup.ISUPProvider. This interface defines the methods that will be used by any registered ISUP User application implementing the org.mobicents.protocols.ss7.isup.ISUPListener to listen ISUP events(messages and timeouts).

Below is simple example of stack usage:




import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import org.mobicents.protocols.ss7.isup.ISUPEvent;
import org.mobicents.protocols.ss7.isup.ISUPListener;
import org.mobicents.protocols.ss7.isup.ISUPProvider;
import org.mobicents.protocols.ss7.isup.ISUPStack;
import org.mobicents.protocols.ss7.isup.ISUPTimeoutEvent;
import org.mobicents.protocols.ss7.isup.ParameterException;
import org.mobicents.protocols.ss7.isup.impl.ISUPStackImpl;
import org.mobicents.protocols.ss7.isup.message.ISUPMessage;    
import org.mobicents.ss7.linkset.oam.Layer4;
import org.mobicents.ss7.linkset.oam.Linkset;
public class ISUPTest implements ISUPListener
{
    protected ISUPStack stack;
    protected ISUPProvider provider;
    protected Linkset isupLinkSet;
    
    
    public void setUp() throws Exception {
        
        this.isupLinkSet = ....; //same linksets as in SS7Service
        this.stack = new ISUPStackImpl();
        this.stack.configure(getSpecificConfig());
        this.provider = this.stack.getIsupProvider();
        this.provider.addListener(this);
        Mtp3UserPart userPart = // create with proper factory, dahdii, dialogi, m3ua
        this.stack.setMtp3UserPart(userPart);
        CircuitManagerImpl circuitManager = new CircuitManagerImpl();
        circuitManager.addCircuit(1, 431613); // CIC - 1, DPC for it - 431613
        
        
        this.stack.setCircuitManager(circuitManager);
        this.stack.start();
    }
    
    
    public void onEvent(ISUPEvent event) {
        ISUPMessage msg = event.getMessage();
        switch(msg.getCircuitIdentificationCode().getCIC())
        {
            case AddressCompleteMessage._COMMAND_CODE:
            //only complete
            break;
            case ConnectedMessage._COMMAND_CODE:
            case AnswerMessage._COMMAND_CODE:
            //we are good to go
            ConnectedNumber cn = (ConnectedNumber)msg.getParameter(ConnectedNumber._PARAMETER_CODE);
            //do something
            break;
            case ReleaseMessage._COMMAND_CODE:
            //remote end does not want to talk 
            RealeaseCompleteMessage rlc = provider.getMessageFactory().createRLC();
            rlc.setCircuitIdentificationCode(msg.getCircuitIdentificationCode());
            rlc.setCauseIndicators(   ((ReleaseComplete)msg).getCauseIndicators());
            provider.sendMessage(rlc);
            
        }
    }
    public void onTimeout(ISUPTimeoutEvent event) {
        switch(event.getTimerId())
        {
            case ISUPTimeoutEvent.T1:
                //do something
                break;
            case ISUPTimeoutEvent.T7:
                //do even more
                break;
        }
    }
}